package compare

import "reflect"

// StructEqual 比较两个相同类型的结构体，如果它们相等，则返回 true。
func StructEqual[T any](a, b T) bool {
	aValue := reflect.ValueOf(a)
	bValue := reflect.ValueOf(b)

	if aValue.Type() != bValue.Type() {
		return false
	}

	for i := 0; i < aValue.NumField(); i++ {
		fieldA := aValue.Field(i)
		fieldB := bValue.Field(i)

		if fieldA.Interface() != fieldB.Interface() {
			return false
		}
	}

	return true
}
